/** * Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.tools.forge.ui.internal.ext.control; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.jboss.forge.addon.convert.Converter; import org.jboss.forge.addon.convert.ConverterFactory; import org.jboss.forge.addon.ui.controller.CommandController; import org.jboss.forge.addon.ui.hints.InputType; import org.jboss.forge.addon.ui.input.InputComponent; import org.jboss.forge.addon.ui.input.UISelectOne; import org.jboss.forge.addon.ui.util.InputComponents; import org.jboss.forge.furnace.proxy.Proxies; import org.jboss.tools.forge.core.furnace.FurnaceService; import org.jboss.tools.forge.ui.internal.ext.wizards.ForgeWizardPage; public class RadioControlBuilder extends ControlBuilder<Control> { @Override @SuppressWarnings({ "unchecked" }) public Control build(final ForgeWizardPage page, final InputComponent<?, ?> input, final String inputName, final Composite parent) { // Create the label Label label = new Label(parent, SWT.NULL); label.setText(getMnemonicLabel(input, true)); label.setToolTipText(input.getDescription()); Composite container = new Composite(parent, SWT.NULL); container.setData(LABEL_DATA_KEY, label); container.setLayout(new RowLayout()); container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); final ConverterFactory converterFactory = FurnaceService.INSTANCE.getConverterFactory(); UISelectOne<Object> selectOne = (UISelectOne<Object>) input; Converter<Object, String> itemLabelConverter = InputComponents.getItemLabelConverter(converterFactory, selectOne); Object originalValue = InputComponents.getValueFor(input); Iterable<Object> valueChoices = selectOne.getValueChoices(); if (valueChoices != null) { for (final Object choice : valueChoices) { final String itemLabel = itemLabelConverter.convert(choice); final Button button = new Button(container, SWT.RADIO); button.setText(itemLabel); button.setToolTipText(input.getDescription()); boolean selected = Proxies.areEquivalent(choice, originalValue); button.setSelection(selected); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (button.getSelection()) { final CommandController controller = page.getController(); controller.setValueFor(inputName, Proxies.unwrap(choice)); } } }); } } // skip the thrid column Label dummy = new Label(parent, SWT.NONE); dummy.setText(""); return container; } @Override protected Class<Object> getProducedType() { return Object.class; } @Override protected String getSupportedInputType() { return InputType.RADIO; } @Override protected Class<?>[] getSupportedInputComponentTypes() { return new Class<?>[] { UISelectOne.class }; } }